package taskenum

import (
	"yunj/pkg/yunj/core/enum"
	"yunj/pkg/yunj/util"
)

// 此处不自定义类型，防止数据库占位符?替换为字符串，在mysql进行匹配时发生类型转换

// 定义常量
const (
	// 数据导出
	TYPE_TABLE_BUILDER_EXPORT uint8 = 11
)

// 实现EnumInerface接口
type Type struct {
	enum.Enum[uint8]
}

// Type.GetInstance().GetDescMap()
func (e *Type) AllConstAttrs() map[uint8]map[string]any {
	return map[uint8]map[string]any{
		TYPE_TABLE_BUILDER_EXPORT: {
			"desc":        "列表数据导出",
			"notice_icon": "layui-icon-export",
		},
	}
}

// 获取通知图标
func (e *Type) GetNoticeIcon() string {
	attrRaw := e.GetAttr("notice_icon")
	icon, _ := enum.ToString(attrRaw)
	if icon == "" {
		icon = "layui-icon-email"
	}
	return util.IconClass(icon)
}

// 存储已经创建的实例
var typeInstanceCache = make(map[uint8]*Type)

// 根据value获取枚举
func TypeByValue(value uint8) *Type {
	if instance, exists := typeInstanceCache[value]; exists {
		return instance
	}
	e := &Type{}
	enum.SetEnumInstance(&e.Enum, e, value)
	typeInstanceCache[value] = e
	return e
}

var TypeEnum *Type = func() *Type {
	e := &Type{}
	enum.SetEnumInstance(&e.Enum, e)
	return e
}()
